package inmobiliariafrsf;

import entidades.VentaInmueble;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.JasperCompileManager;

/**
 * Clase encargada de la comunicacion con iReport para
 * completar la informacion del reporte de venta de inmuebles
 * para su posterior compilacion y muestra en pantalla
 */     
public class GenerarVenta {

    static Connection conn = null;

     /**
     * Creador de una instancia de la clase, la cual controla la comunicacion
     * con iReport, la conexion con la base de datos para las consultas internas
     * del reporte, y la informacion correspondiente al reporte
     * 
     * @param venta                     Clase VentaInmueble, la cual contiene
     *                                  la informacion necesaria para completar
     *                                  el reporte de venta
     * @param otrasCaracteristicas1     Cadena que contiene la primera parte
     *                                  de las "otras caracteristicas" del
     *                                  inmueble que se venta, la cual es
     *                                  pasada como parametro para el reporte
     * @param otrasCaracteristicas2     Cadena que contiene la segunda parte
     *                                  de las "otras caracteristicas" del
     *                                  inmueble que se venta, la cual es
     *                                  pasada como parametro para el reporte
     */
    public GenerarVenta(VentaInmueble venta, String otrasCaracteristicas1, String otrasCaracteristicas2) {
        // Cargamos el driver JDBC
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("MySQL JDBC Driver not found.");
            System.exit(1);
        }

        try {
            conn = DriverManager.getConnection("jdbc:mysql://190.228.29.63:3306/metodos_agiles", "metodos_agiles", "metodos_agiles");
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            System.out.println("Error de conexión: " + e.getMessage());
            JOptionPane.showMessageDialog(null, "No se pudo conectar a la base de datos para generar el catálogo.", "Error en la conexión a la base de datos.", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Map parameters = new HashMap();
            String nombre_cliente = venta.getCliente().getApellido() +", " +venta.getCliente().getNombre();
            parameters.put("NOMBRE_CLIENTE", nombre_cliente);
            parameters.put("ID_VENDEDOR", venta.getVendedor().getIdVendedor().toString());
            parameters.put("CODIGO", venta.getInmueble().getCodigo());
            parameters.put("TIPO",venta.getInmueble().getCodigo());
            
            parameters.put("FRENTE", Double.toString(venta.getInmueble().getFrente()) + " mts");
            parameters.put("FONDO", Double.toString(venta.getInmueble().getFondo()) + " mts");
            parameters.put("SUPERFICIE", Double.toString(venta.getInmueble().getSuperficie()) + " m2");
            
            parameters.put("ANTIGUEDAD", Integer.toString(venta.getInmueble().getAntiguedad()) + " años");
            parameters.put("DORMITORIOS", Byte.toString(venta.getInmueble().getDormitorios()));
            parameters.put("BANOS", Byte.toString(venta.getInmueble().getBanos()));
            
            parameters.put("OTRAS_CARACT1", otrasCaracteristicas1);
            parameters.put("OTRAS_CARACT2", otrasCaracteristicas2);
            
            String direccion = venta.getInmueble().getCalle() +" "+ venta.getInmueble().getNumero().toString();
            if (venta.getInmueble().getPiso() >= 0)
                direccion += " " + venta.getInmueble().getPiso().toString() +" "+ venta.getInmueble().getDepartamento();
            
            parameters.put("DIRECCION", direccion);
            parameters.put("BARRIO", venta.getInmueble().getBarrio());
            parameters.put("PROVINCIA", venta.getInmueble().getLocalidad().getProvincia().getNombre());
            parameters.put("LOCALIDAD", venta.getInmueble().getLocalidad().getNombre());
            parameters.put("MONTO", Double.toString(venta.getPrecioVenta()));
            
            JasperReport report = JasperCompileManager.compileReport(System.getProperty("user.dir")+"\\VentaInmueble.jrxml");
            JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);
            
            //Para visualizar el pdf directamente desde java
            JasperViewer jviewer = new JasperViewer(print, false);
            jviewer.setTitle("Venta Inmueble "+nombre_cliente);
            //jviewer.setIconImage(new ImageIcon("doc_table.png").getImage());
            jviewer.setVisible(true);
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            /*
             * Cleanup antes de salir
             */
            try {
                if (conn != null) {
                    conn.rollback();
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
} // main()

